package beans;

import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import dao.DestinatarioDao;
import dao.ProyectoDao;
import excepciones.DaoException;

import modelo.Destinatario;
import modelo.Proyecto;

@ManagedBean 
@SessionScoped
public class EditarDestinatariosBean {

	@ManagedProperty(value="#{listProyectosBean}")
	private ListProyectosBean listProyectosBean;
	
	private List<Destinatario> destinatarios;
	private List<Destinatario> seleccionBorrar;
	private Proyecto proyecto;
	private List <Destinatario> seleccionDestinatarios;
	private List<Destinatario> todosDestinatarios;
	private ProyectoDao proyectoDao;
	private String origen = null; 
	
	public ProyectoDao getProyectoDao() {
		return proyectoDao;
	}

	public void setProyectoDao(ProyectoDao proyectoDao) {
		this.proyectoDao = proyectoDao;
	}

	@PostConstruct
	public void init(){
		
		if (listProyectosBean.getSelected() != null){
			
			try {
				if (this.origen == null){
								
					// Traigo las unidadesAcademicas
					this.proyectoDao = new ProyectoDao();
					this.proyecto = proyectoDao.findById(this.getListProyectosBean().getSelected());
					this.setDestinatarios((List<Destinatario>) this.getProyecto().getMis_destinatarios());					
				}else{
					this.origen = "Recarga";
					// this.setCoordinadores();
					/* NO SETEO el coord*/
				}
			} catch (DaoException e) {
				
				e.printStackTrace();
			}	
		}else{
			this.setDestinatarios(null);
		}
		DestinatarioDao destinatarioDao = new DestinatarioDao();
		try {
			this.setTodosDestinatarios(destinatarioDao.getTodosDestinatarios());
		} catch (DaoException e) {
			e.printStackTrace();
		}
		
	}

	public void agregar(){
		List<Destinatario> dest = this.getDestinatarios();
		List<Destinatario> selec = this.getSeleccionDestinatarios();
		for (Destinatario uni : selec) {
			if (!getDestinatarios().contains(uni))
				dest.add(uni);
		}		
		this.setDestinatarios(dest);
		actualizarProyecto();
	}
	
	public void borrar(){
		List<Destinatario> aBorrar = this.getSeleccionBorrar();
		
		for (Destinatario dest : aBorrar) {
			this.getDestinatarios().remove(dest);
		}		
		actualizarProyecto();
	}
	
	/**
	 * Actualiza en la BD las modificaciones que se hicieron en el proyecto
	 */
	protected void actualizarProyecto(){
		ProyectoDao proDao = new ProyectoDao(proyecto);
		this.proyecto.setMis_destinatarios(getDestinatarios());
		try {
			proDao.update();
			proDao.closeEntityManager();
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}
	
	public String volver(){
		return "irEditarProyectos";
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public ListProyectosBean getListProyectosBean() {
		return listProyectosBean;
	}

	public void setListProyectosBean(ListProyectosBean listProyectosBean) {
		this.listProyectosBean = listProyectosBean;
	}

	public String getOrigen() {
		return origen;
	}

	public void setOrigen(String origen) {
		this.origen = origen;
	}

	public List<Destinatario> getDestinatarios() {
		return destinatarios;
	}

	public void setDestinatarios(List<Destinatario> destinatarios) {
		this.destinatarios = destinatarios;
	}

	public List <Destinatario> getSeleccionDestinatarios() {
		return seleccionDestinatarios;
	}

	public void setSeleccionDestinatarios(List <Destinatario> seleccionDestinatarios) {
		this.seleccionDestinatarios = seleccionDestinatarios;
	}

	public List<Destinatario> getTodosDestinatarios() {
		return todosDestinatarios;
	}

	public void setTodosDestinatarios(List<Destinatario> todosDestinatarios) {
		this.todosDestinatarios = todosDestinatarios;
	}

	public List<Destinatario> getSeleccionBorrar() {
		return seleccionBorrar;
	}

	public void setSeleccionBorrar(List<Destinatario> seleccionBorrar) {
		this.seleccionBorrar = seleccionBorrar;
	}

	
}